function [PH,ax]=IRFSoloPlot(IRFMat,LineStyleList,SymmetryFlag,ax,YSCALE)

%% Preliminary Setup
LineWidth           =   3;

%% YAxis
% Actual Limits
YMax                =   max(max(IRFMat));
YMin                =   min(min(IRFMat));
if YMax==0 && YMin==0
    YMax            =   1e-2;
end
% Y-Axis Interval
NumInterval         =   3;
RoundUnit           =   0.5;
if nargin<5 || isempty(YSCALE)
    YAbsMax             =   max(abs([YMax;YMin]));
else
    YAbsMax             =   max([abs(YSCALE);abs([YMax;YMin])]);
    YMin                =   min([YMin;YSCALE(1)]);
    YMax                =   max([YMax;YSCALE(2)]);
end

YExpNum             =   floor(log(YAbsMax)/log(10));
YY_2digit           =   YAbsMax/(10^YExpNum);
YInterval           =   ceil(YY_2digit/NumInterval/RoundUnit)*...
                        RoundUnit*(10^YExpNum);
YAbsMax             =   YInterval*NumInterval;

% Strech the Limit by its Magintude and Grid Interval
if nargin<3
    SymmetryFlag    =   1;
end

switch SymmetryFlag
    case 0
        if YMin>0
            YMax        =   ceil(YMax/YInterval)*YInterval;
            YMin        =   0;
            YTicksVec   =   (0:YInterval:YMax)';
        elseif YMax>0
            YMax        =   ceil(YMax/YInterval)*YInterval;
            YMin        =   floor(YMin/YInterval)*YInterval;
            YTicksVec   =   [(YMin:YInterval:0)';...
                             (YInterval:YInterval:YMax)'];
        else
            YMax        =   0;
            YMin        =   floor(YMin/YInterval)*YInterval;
            YTicksVec   =   (-YMin:YInterval:0)';
        end
    case 1
        YMax        =   YAbsMax;
        YMin        =   -YAbsMax;
        YTicksVec   =   [(YMin:YInterval:0)';(YInterval:YInterval:YMax)'];
end

%% XAxis
% Actual Limit
[Num_V,Num_T]       =   size(IRFMat); 

% X-Axis Interval
NumInterval         =   6;
RoundUnit           =   4;
XInterval           =   ceil(Num_T/NumInterval/RoundUnit)*...
                        RoundUnit;
XGrid               =   (0:1:Num_T-1)';
XTicksVec           =   (0:XInterval:ceil((Num_T-1)/XInterval)*XInterval)';
XTicksVec           =   XTicksVec(XTicksVec<=Num_T);

%% Generate the Graph
% Plots
if nargin<4
    ax              =   gca;
end
PH                  =   zeros(Num_V,1);
[StyDim_1,StyDim_2] =   size(LineStyleList);

if Num_V==1 && StyDim_1==1 && ~iscell(LineStyleList)
    LineStyleList   =   {LineStyleList};
end
for vv=1:Num_V
    switch StyDim_1
        case 1
            PH(vv)          =   plot(ax,XGrid,IRFMat(vv,:),...
                                        LineStyleList{vv},...
                                        'linewidth',LineWidth);
        case 2
            PH(vv)          =   plot(ax,XGrid,IRFMat(vv,:),...
                                        'linestyle',LineStyleList{1,vv},...
                                        'color',LineStyleList{2,vv},...
                                        'linewidth',LineWidth);
        case 3
            PH(vv)          =   plot(ax,XGrid,IRFMat(vv,:),...
                                        'linestyle',LineStyleList{1,vv},...
                                        'color',LineStyleList{2,vv},...
                                        'linewidth',LineStyleList{3,vv});
        case 4
            PH(vv)          =   plot(ax,XGrid,IRFMat(vv,:),...
                                        'linestyle',LineStyleList{1,vv},...
                                        'color',LineStyleList{2,vv},...
                                        'linewidth',LineStyleList{3,vv},...
                                        'Marker',LineStyleList{4,vv},...
                                        'MarkerSize',LineStyleList{3,vv}*3);
    end
    hold on;

end
if Num_V==1
    PH              =   PH(1);
end

plot(ax,XGrid,zeros(1,Num_T),'k-','linewidth',0.3);
hold off;

% Setup Limits and Ticks
ax.YLim                 =   [YMin,YMax];
ax.YTick                =   YTicksVec;
ax.XTick                =   XTicksVec;
ax.YAxis.Exponent       =   YExpNum;
ax.YAxis.TickLabelFormat=   '%.1g';
ax.YAxis.FontSize       =   14;
ax.XAxis.FontSize       =   14;
ax.XGrid                =   'on';
ax.YGrid                =   'on';